// vue.config.js 是一个可选的配置文件，如果项目的 (和 package.json 同级的) 根目录中存在这个文件，那么它会被 @vue/cli-service 自动加载。

const path = require('path');
// const chalk = require("chalk");
// const HappyPack = require('happypack');
// const TerserPlugin = require('terser-webpack-plugin');
// const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');
// const happyThreadPool = HappyPack.ThreadPool({ size: 5 });
// // const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
// const ProgressBarPlugin = require('progress-bar-webpack-plugin');
// const CompressionPlugin = require('compression-webpack-plugin'); //Gzip
const devMode = process.env.NODE_ENV === "development";
const resolve = dir => {
    return path.join(__dirname, dir);
}

// 配置动态打包样式
const getCSSprependData = () => {
    let css = '@import "@/assets/style/index.scss";';
    const systemType = process.env.VUE_APP_SYSTEM_TYPE;
    if (systemType) {
        css = `@import "@/assets/style/${systemType}.scss";` + css;
    }
    return css;
}

module.exports = {
    publicPath: './', //部署应用包时的基本 URL
    outputDir: 'dist-web-font-end', //当运行 vue-cli-service build 时生成的生产环境构建文件的目录
    assetsDir: '.', //放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
    indexPath: 'index.html', //定生成的 index.html 的输出路径 (相对于 outputDir)
    pages: undefined, //可配置成在 multi-page 模式下构建应用，默认为单页面应用
    lintOnSave: process.env.NODE_ENV !== 'production', //是否在开发环境下通过eslint-loader在每次保存时lint代码
    runtimeCompiler: true, //是否使用包含运行时编译器的 Vue 构建版本
    productionSourceMap: true, //  生产环境开启sourcemap (方便调试)
    //列出需要转译的第三方包包名
    transpileDependencies: [
        'resize-detector',
        'vue-charts',
        'egovamap',
        'js-base64',
        'egovacoordconvert'
    ],
    // 自定义调整 webpack 配置：https://cli.vuejs.org/zh/guide/webpack.html#简单的配置方式
    configureWebpack: config => {},
    css: {
        requireModuleExtension: true, // 是否启用 CSS modules
        extract: process.env.NODE_ENV === "production", // 是否使用css分离插件
        sourceMap: false, // 是否开启 CSS source map
        // css预设器配置项
        loaderOptions: {
            sass: {
                // 这里的选项会传递给sass-loader
                // 设置css中引用文件的路径，引入通用使用的scss文件（如包含的@mixin）
                prependData: getCSSprependData()
            }
        }
    },
    //配置开发服务器
    devServer: {
        host: "0.0.0.0",
        port: 8080,
        //如果你的前端应用和后端API服务器没有运行在同一个主机上，你需要在开发环境下将API请求代理到此API服务器
        proxy: {
            "/system/api/": {
                target: "http://localhost:9000/",
                changeOrigin: true,//开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                pathRewrite: {
                    "^/system/api": "/"   //重写路由地址，来匹配后端地址
                }
            },
            "/list/": {
                target: "http://localhost:9000/",
                changeOrigin: true,
                pathRewrite: {
                    "^/system/api": "/"
                }
            }
        }
    },
    //是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用，仅作用于生产构建，在适当的时候开启几个子进程去并发的执行压缩
    parallel: require('os').cpus().length > 1,
}
